package com.example.springboot.common;
// 导入Spring框架相关的配置和CORS处理类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 跨域资源共享(CORS)配置类
 * 用于解决前后端分离架构中跨域请求的问题
 */

@Configuration //@Configuration配置类
public class CorsConfig {
    /**
     * 构建CORS配置，定义允许跨域的规则
     * @return 配置好的CORS配置对象
     */
    private CorsConfiguration buildConfig() {
        // 创建CORS配置实例
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1. 允许任何域名进行跨域调用
        // 注意：生产环境中建议使用具体域名，避免使用通配符"*"带来的安全风险
        corsConfiguration.addAllowedOrigin("*"); // 1容许任何域名使用
        corsConfiguration.addAllowedHeader("*"); // 2容许任何请求头
        corsConfiguration.addAllowedMethod("*"); // 3容许任何方法（post、get等）
        return corsConfiguration;
    }

    /**
     * 创建CORS过滤器的Bean，用于应用CORS配置
     * @return CORS过滤器实例
     */
    @Bean // 声明一个Bean对象
    public CorsFilter corsFilter() {
        // 创建基于URL的CORS配置源
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 4. 对所有URL都应用CORS配置
        // 第一个参数"/**"表示匹配所有路径
        // 第二个参数传入前面构建的CORS配置
        source.registerCorsConfiguration("/**", buildConfig());
        // 返回CORS过滤器，将配置好的CORS源应用到过滤器中
        return new CorsFilter(source);
    }
}